/**
* @project admin-go-api
* @name sysRole
* @descriptions 角色控制层
* @author 寒锋
* @date 2023-12-20 14:12:34
 */

package controller

import (
	"admin-go-api/api/entity"
	"admin-go-api/api/service"
	"admin-go-api/common/response"
	"admin-go-api/constants"
	"fmt"
	"github.com/gin-gonic/gin"
	"strconv"
)

// GetSysRoleList
// @Summary 角色列表
// @Produce json
// @Description 角色列表接口
// @Security ApiKeyAuth
// @Param pageNum query int false "当前页"
// @Param pageSize query int false "每页数"
// @Param roleName query string false "角色名称"
// @param roleKey query string false "角色key"
// @Param status query int false "状态：1->启用,2->禁用"
// @Param beginTime query string false "开始时间"
// @Param endTime query string false "结束时间"
// @Success 200 {object} response.Result
// @Router /api/sysRole/index [get]
func GetSysRoleList(c *gin.Context) {
	PageNum, _ := strconv.Atoi(c.Query("pageNum"))
	PageSize, _ := strconv.Atoi(c.Query("pageSize"))
	RoleName := c.Query("roleName")
	RoleKey := c.Query("roleKey")
	Status, _ := strconv.Atoi(c.Query("status"))
	BeginTime := c.Query("beginTime")
	EndTime := c.Query("endTime")
	service.SysRoleService().GetSysRoleList(c, PageNum, PageSize, RoleName, RoleKey, Status, BeginTime, EndTime)
}

// GetSysRoleVoList
// @Summary 角色下拉列表
// @Produce json
// @Description 角色下拉列表
// @Security ApiKeyAuth
// @Success 200 {object} response.Result
// @Router /api/sysRole/vo/list [get]
func GetSysRoleVoList(c *gin.Context) {
	service.SysRoleService().GetSysRoleVoList(c)
}

// CreateSysRole
// @Summary 添加角色接口
// @Produce json
// @Description 添加角色接口
// @Security ApiKeyAuth
// @param data body entity.StoreSysRoleDto true "data"
// @Success 200 {object} response.Result
// @Router /api/sysRole/store [post]
func CreateSysRole(c *gin.Context) {
	var dto entity.StoreSysRoleDto
	err := c.ShouldBind(&dto)
	if err != nil {
		response.Failed(c, int(constants.ApiCode.FAILED), fmt.Sprintf("参数错误（%s）", err.Error()))
	}
	service.SysRoleService().CreateSysRole(c, dto)
}

// GetSysRoleById
// @Summary 角色详情接口
// @Produce json
// @Description 角色详情接口
// @Security ApiKeyAuth
// @Param role_id query int true "角色id"
// @Success 200 {object} response.Result
// @Router /api/sysRole/show [get]
func GetSysRoleById(c *gin.Context) {
	RoleId, _ := strconv.Atoi(c.Query("role_id"))
	service.SysRoleService().GetSysRoleById(c, RoleId)
}

// UpdateSysRole
// @Summary 修改角色接口
// @Produce json
// @Description 修改角色接口
// @Security ApiKeyAuth
// @param data body entity.UpdateSysRoleDto true "data"
// @Success 200 {object} response.Result
// @Router /api/sysRole/update [put]
func UpdateSysRole(c *gin.Context) {
	var dto entity.UpdateSysRoleDto
	err := c.ShouldBind(&dto)
	if err != nil {
		response.Failed(c, int(constants.ApiCode.FAILED), fmt.Sprintf("参数错误（%s）", err.Error()))
	}
	service.SysRoleService().UpdateSysRole(c, dto)
}

// UpdateSysRoleState
// @Summary 修改角色状态接口
// @Produce json
// @Description 修改角色状态接口
// @Security ApiKeyAuth
// @param data body entity.UpdateSysRoleStateDto true "data"
// @Success 200 {object} response.Result
// @Router /api/sysRole/state [put]
func UpdateSysRoleState(c *gin.Context) {
	var dto entity.UpdateSysRoleStateDto
	err := c.ShouldBind(&dto)
	if err != nil {
		response.Failed(c, int(constants.ApiCode.FAILED), fmt.Sprintf("参数错误（%s）", err.Error()))
	}
	service.SysRoleService().UpdateSysRoleState(c, dto)
}

// DeleteSysRole
// @Summary 删除角色接口
// @Produce json
// @Description 删除角色接口
// @Security ApiKeyAuth
// @param data body entity.SysRoleIdDto true "data"
// @Success 200 {object} response.Result
// @Router /api/sysRole/destroy [delete]
func DeleteSysRole(c *gin.Context) {
	var dto entity.SysRoleIdDto
	err := c.ShouldBind(&dto)
	if err != nil {
		response.Failed(c, int(constants.ApiCode.FAILED), fmt.Sprintf("参数错误（%s）", err.Error()))
	}
	service.SysRoleService().DeleteSysRoleById(c, dto)
}

// GetRoleMenuIdByRoleId 根据角色id查询菜单数据
// @Summary 根据角色id查询菜单数据接口
// @Produce json
// @Description 根据角色id查询菜单数据接口加路由
// @Security ApiKeyAuth
// @Param role_id query int true "角色id"
// @Success 200 {object} response.Result
// @router /api/sysRole/getRoleMenuIdByRoleId [get]
func GetRoleMenuIdByRoleId(c *gin.Context) {
	RoleId, _ := strconv.Atoi(c.Query("role_id"))
	service.SysRoleService().GetSysRoleMenuIdList(c, RoleId)
}

// AssignPermissions 分配权限
// @Summary 分配权限接口
// @Produce json
// @Description 分配权限接口
// @Security ApiKeyAuth
// @Param data body entity.RoleMenu true "data"
// @Success 200 {object} response.Result
// @router /api/sysRole/assignPermissions [put]
func AssignPermissions(c *gin.Context) {
	var roleMenu entity.RoleMenu
	err := c.ShouldBind(&roleMenu)
	if err != nil {
		response.Failed(c, int(constants.ApiCode.FAILED), fmt.Sprintf("参数错误（%s）", err.Error()))
	}
	service.SysRoleService().AssignPermissions(c, roleMenu)
}
